//============================================================================
// Name        : Chat.cpp
// Author      : Facundo
// Version     :
// Copyright   :
// Description : Prueba de commit.
//============================================================================

#include <iostream>

#include "enviar_mensaje/enviarmensaje.h"
#include "recibir_mensaje/RecibirMensaje.h"
#include "ColaHandler/ColaHandler.h"
#include "ColaHandler/ColaHandlerRecibir.h"


#include "signal/SIGINT_Handler.h"
#include "signal/SignalHandler.h"

#include <string.h>
#include <stdlib.h>





using namespace std;


int main() {




	int pid = fork ();



    if ( pid > 0 ) {
    	ColaHandlerRecibir *handler= new ColaHandlerRecibir();
    	cout << "Chat"<< endl; // prints
    	SIGINT_Handler sigint_handler;
   		SignalHandler :: getInstance()->registrarHandler ( SIGINT,&sigint_handler );

		RecibirMensaje *mensaje_rec =new RecibirMensaje(handler);
		do{
			mensaje_rec =new RecibirMensaje(handler);
				mensaje_rec->Recibir();

		}while(sigint_handler.getGracefulQuit() ==0);
		mensaje_rec->~RecibirMensaje();
	   	handler->~ColaHandlerRecibir();

}
		else

	{

			ColaHandler *handler= new ColaHandler();

			EnviarMensaje *mensaje_env=new EnviarMensaje(handler);

			bool salir=false;
			do{
			mensaje_env->obtenerMensaje();

			if (mensaje_env->salir()) {salir=true;}
			else{ mensaje_env->enviar();}

			}
			while (salir==false);
			kill (pid, SIGINT);
			mensaje_env->~EnviarMensaje();

	}



	cout<<"Termino"<<endl;
	return 0;
}
